package dados;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.swing.JOptionPane;
import negocios.Classificacao;

public class ConectaBDClassificacoes {

	private Connection conexao;
	
	public ConectaBDClassificacoes() throws SQLException, ClassNotFoundException {
		
		this.conexao = ConectaBD.getConectacao();
		
	}
	
	public Object[] listarClassificacoes() {

        Object[] cla = null;

        try {

            PreparedStatement pst1 = conexao.prepareStatement("SELECT ICLASSICODI, VCLASSIDESC FROM tbclassificacao ORDER BY ICLASSICODI");
            PreparedStatement pst2 = conexao.prepareStatement("SELECT COUNT(*) as RESULT FROM tbclassificacao");

            ResultSet rs1 = pst1.executeQuery();
            ResultSet rs2 = pst2.executeQuery();

            rs2.next();
            cla = new Classificacao[rs2.getInt("RESULT")];

            for(int cont = 0; cont < cla.length; cont++) {

                rs1.next();
                cla[cont] = new Classificacao(rs1.getInt(1), rs1.getString(2));

            }

            return cla;

        } catch(SQLException e) {

            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da consulta", JOptionPane.ERROR_MESSAGE);

        }

		return cla;
		
	}

	public Classificacao consultarClassificacao(Classificacao classificacao) {

		try {

            PreparedStatement pst = conexao.prepareStatement("SELECT ICLASSICODI, VCLASSIDESC FROM tbclassificacao WHERE ICLASSICODI = ?");

            pst.setInt(1, classificacao.getCodigo());
                        
            ResultSet rs = pst.executeQuery();
                                         
            if(rs.next()) {

                Classificacao cla = new Classificacao(rs.getInt(1), rs.getString(2));

                pst.close();
                
                rs.close();
                
                conexao.close();

                return cla;
                
            }
           
            
        } catch(SQLException e) {
            
            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da consulta", JOptionPane.ERROR_MESSAGE);
            
        } catch(NumberFormatException e) {
            
            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da consulta", JOptionPane.ERROR_MESSAGE);
            
        }
        
        return null;
		
	}
	
	public void inserirClassificacao(Classificacao classificacao) {
		
		try {
            
            PreparedStatement pst = conexao.prepareStatement("INSERT INTO tbclassificacao (VCLASSIDESC) VALUES (?)");
            
            pst.setString(1, classificacao.getDescricao());
            pst.execute();
            pst.close();

            conexao.close();
            
        } catch(SQLException e) {
            
            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da inserção", JOptionPane.ERROR_MESSAGE);
            
        }
		
	}
	
	public void editarClassificacao(Classificacao classificacao) {
		
		if(this.consultarClassificacao(classificacao) != null) {

            try {

                this.conexao = ConectaBD.getConectacao();

                PreparedStatement pst = conexao.prepareStatement("UPDATE tbclassificacao SET VCLASSIDESC = ? WHERE ICLASSICODI = ?");

                pst.setString(1, classificacao.getDescricao());
                pst.setInt(2, classificacao.getCodigo());

                pst.executeUpdate();
                pst.close();

                conexao.close();

            } catch(SQLException e) {

                JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da edição", JOptionPane.ERROR_MESSAGE);

            }

        }
		
	}
	
	public void excluirClassificacao(Classificacao classificacao) {

		if(this.consultarClassificacao(classificacao) != null) {

            try {

                this.conexao = ConectaBD.getConectacao();

                PreparedStatement pst = conexao.prepareStatement("DELETE FROM tbclassificacao WHERE ICLASSICODI = ?");

                pst.setInt(1, classificacao.getCodigo());

                pst.executeUpdate();
                pst.close();

                conexao.close();

            } catch(SQLException e) {

                JOptionPane.showMessageDialog(null, e.getMessage(), "Erro na execução da remoção", JOptionPane.ERROR_MESSAGE);

            }

        }
		
	}
	
}
